/* 对axios进行二次封装
请求拦截器增加token
响应拦截器处理大数据
*/
import store from '@/store'
import router from '@/router';
import axios from "axios";
import { Notify, Toast } from "vant";

const instance = axios.create({
  baseURL: 'http://localhost:8087'
})

// 在instance上添加请求拦截器 补充请求头token信息
instance.interceptors.request.use(function (config) {
  // 从vuex中取出token
  const token = store.state.tokenInfo
  // console.log(token)
  // 如果有token则 添加到headers中
  if (token) {
    config.headers['authorization'] = token
  }
  return config
}, function (error) {
  return Promise.reject(error)
})

// 响应拦截器
instance.interceptors.response.use(
  (res) => {
    if (res.status !== 200) {
      Toast(res.data.errorMsg || '服务异常')
      return Promise.reject(res.data)
    }
    return res
  }, (err) => {
    // TODO 5. 处理401错误
    // 错误的特殊情况 => 401 权限不足 或 token 过期 => 拦截到登录
    if (err.response?.status === 401) {
      // 清除token
      store.commit("mRemoveTokenInfo")
      router.push("/login");
    }
    // 错误的默认情况 => 只要给提示
    Toast(err.message || '服务异常');
    return Promise.reject(err)
  }
)

export default instance